<?php

namespace Mouta\AmistateBundle\Controller;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Mouta\AmistateBundle\utils\SfSolr;
use Mouta\AmistateBundle\Entity\Usuario;
use Mouta\AmistateBundle\Entity\UsuarioRepository;
use Mouta\AmistateBundle\utils\Strings;
use Mouta\AmistateBundle\Entity\ImagenUsuario;


class ListadosController extends Controller
{
    public function listLindosAction($page)
    {
        return $this->listLindosPrecesar(0,$page);
    }
    public function listLindasAction($page)
    {
        return $this->listLindosPrecesar(1,$page);
    }
    
    public function list1Action($tag1,$page)
    {
        $tags = array();
        $tags[] = $tag1;
        return $this->listPrecesar($tags, $page);
    }
    public function list2Action($tag1,$tag2,$page)
    {
        $tags = array();
        $tags[] = $tag1;
        $tags[] = $tag2;
        return $this->listPrecesar($tags, $page);
    }
    public function list3Action($tag1,$tag2,$tag3,$page)
    {
        $tags = array();
        $tags[] = $tag1;
        $tags[] = $tag2;
        $tags[] = $tag3;
        return $this->listPrecesar($tags, $page);
    }
    
    protected function hidrateSolr($result){
        $usuarios = array();
        foreach($result['response']['docs'] as $u){
            $usuario = new Usuario();
            $usuario->setId($u['id']);
            $usuario->setNombre($u['nombre']);
            $usuario->setPara($u['para']);
            $usuario->setCumple( new \DateTime($u['cumple']));
            $usuario->setUltimaActividad( new \DateTime($u['ultima_actividad']));
            $usuario->setDescripcion( $u['descripcion']);
            $usuario->setSeoPais(Strings::getSeoUrl($u['pais']));
            $usuario->setPais( $u['pais']);
            $usuario->setSeoProvincia(Strings::getSeoUrl($u['provincia']));
            $usuario->setProvincia( $u['provincia']);
            $usuario->setPuntos( $u['puntos']);
            $usuario->setVotos( $u['votos']);
            if(isset($u['coordenadas_0_coordinate'])) $usuario->setLatitude( $u['coordenadas_0_coordinate']);
            if(isset($u['coordenadas_1_coordinate'])) $usuario->setLongitude( $u['coordenadas_1_coordinate']);
            if($u['sexo'])
                $usuario->setSexo(1);
            else
                $usuario->setSexo(0);
            if($u['busco'])
                $usuario->setBusco(1);
            else
                $usuario->setbusco(0);
            
            if($u['fotodefault']){
                $imagen = new ImagenUsuario();
                $imagen->setImagenBig($u['fotodefault']);
                $imagen->setImagen('t-'.$u['fotodefault']);
                $imagen->setDefa(1);
                $imagen->setUsuario($usuario);

                $usuario->addImagenUsuario($imagen);
            }
            
            $usuarios[] = $usuario;
        }
        return $usuarios;
    }


    public function relacionadosAction($cant){
        $result = SfSolr::getQuery("?q=".urlencode('*:*')."&start=0&rows=$cant&sort=fotodefault%20desc");
        $usuarios = $this->hidrateSolr($result);
        return $this->render('AmistateBundle:listados:list_content.html.twig',array(
            'tags'=>array(),
            'usuarios'=>$usuarios,
            ));
    }
    
    public function filtroMapaAction()
    {
        $dist = 30;
        $user = $this->get('security.context')->getToken()->getUser();
        $lat = $user->getLatitude();
        $lng = $user->getLongitude();
        
        $par = $this->get('router')->match($this->getRequest()->getPathInfo());
        if(isset($par['lat']))
            $lat = $par['lat'];
        if(isset($par['lng']))
            $lng = $par['lng'];
        if(isset($par['dist']))
            $dist = $par['dist'];
        
        return $this->render('AmistateBundle:listados:filtroMapa.html.twig',array(
            'dist'=>$dist,
            'lat'=>$lat,
            'lng'=>$lng,
            'keyGoogleMaps'=>\Mouta\AmistateBundle\utils\SfGoogleMaps::KEY,
            ));
    }
    
    public function enMapaAction($lat,$lng,$dist,$page)
    {
        $limit = 20;
        $offset = ($page-1) * $limit;
        
        if(!$dist)
            $dist = 100;
        if(!$lat)
            $lat = -58.37;
        if(!$lng)
            $lng = -34.60;
        
        $busco = 1;
        if ($this->get('security.context')->isGranted('ROLE_USER')) {
            $user = $this->get('security.context')->getToken()->getUser();
            $busco = $user->getBusco();
        }
        $result = SfSolr::getQuery("?q=sexo:$busco&fq={!geofilt}&sfield=coordenadas&pt=$lng,$lat&d=$dist&sort=geodist()asc&start=$offset&rows=$limit");
        $response = new Response('Content', 404, array('content-type' => 'text/html'));
        $cant = $result['response']['numFound'];
        if($cant<1)
            return $this->render('AmistateBundle:listados:error.html.twig',array(),$response);

        $usuarios = $this->hidrateSolr($result);
        $cant_pag = ceil($cant/$limit);
        $url_base = $this->get('router')->generate('enmapa',array("lat"=>$lat,"lng"=>$lng,"dist"=>$dist));
        $title="Amistate - Busca amigos cerca de dode vos estas.";
        $descripcion="Amistate - Encontra hombres y mujeres cerca de tu casa gratis!!!";
        
        return $this->render('AmistateBundle:listados:list.html.twig',array(
            'tags'=>array(),
            'usuarios'=>$usuarios,
            'cant'=>$cant,
            'page'=>$page,
            'url_base'=>$url_base,
            'cant_pag'=>$cant_pag,
            'title'=>$title,
            'descripcion'=>$descripcion,
            ));
    }
    
    public function FiltroAction($tags)
    {
        $tagsDao = array();
        foreach($tags as $tag){
            if($tag->getIdForm() == 1 ||$tag->getIdForm() == 18 ||$tag->getIdForm() == 19 )
                $tagsDao[$tag->getIdForm()] = $tag;
        }
        
        $quitarSexo = -1;
        $quitarPais = -1;
        $quitarPara = -1;
        
        $tagsSexo = $tagsDao;
        if(isset($tagsSexo[18])){
            $quitarSexo = $tagsSexo[18]->getTagGoogle();
            unset ($tagsSexo[18]);
        }
            
        $querySexo = $this->getQuerySolr($tagsSexo)."&facet=on&facet.field=sexo&start=0&rows=0";
        $resultSexo = SfSolr::getQuery($querySexo);
        $filtroSexo = array();
        $filtroSexo[UsuarioRepository::getOpcionesSexo(1)] = $resultSexo['facet_counts']['facet_fields']['sexo']['true'];
        $filtroSexo[UsuarioRepository::getOpcionesSexo(0)] = $resultSexo['facet_counts']['facet_fields']['sexo']['false'];
        
        
        $tagsPais = $tagsDao;
        if(isset($tagsPais[1])){
            $quitarPais = $tagsPais[1]->getTagGoogle();
            unset ($tagsPais[1]);
        }
        
        $queryPais = $this->getQuerySolr($tagsPais)."&facet=on&facet.field=pais&start=0&rows=0";
        $resultPais = SfSolr::getQuery($queryPais);
        $filtroPais = array();
        $numGrandePaises = 0;
        $numMedioPaises = 0;
        $i=0;
        foreach($resultPais['facet_counts']['facet_fields']['pais'] as  $pais => $cant){
            $i++;
            if($i<7)
                $numGrandePaises = $cant;
            if($i<15)
                $numMedioPaises = $cant;
            if($cant > 0 && $pais!="")
                $filtroPais[$pais] = $cant;
        }
        ksort($filtroPais);
        $tagsPara = $tagsDao;
        if(isset($tagsPara[19])){
            $quitarPara = $tagsPara[19]->getTagGoogle();
            unset ($tagsPara[19]);
        }
        $queryPara = $this->getQuerySolr($tagsPara)."&facet=on&facet.field=para&start=0&rows=0";
        $resultPara = SfSolr::getQuery($queryPara);
        $filtroPara = array();
        $numGrandePara = 0;
        $numMedioPara = 0;
        $i=0;
        foreach($resultPara['facet_counts']['facet_fields']['para'] as  $para => $cant){
            $i++;
            if($i<7)
                $numGrandePara = $cant;
            if($i<15)
                $numMedioPara = $cant;
            if($cant > 0 && $para!="")
                $filtroPara[ UsuarioRepository::getOpcionesPara($para) ] = $cant;
        }
        ksort($filtroPara);
        return $this->render('AmistateBundle:listados:filtro.html.twig',array(
           'filtroSexo'=>$filtroSexo,
           'tagsSexo'=>$tagsSexo,
           'quitarSexo'=>$quitarSexo,
           'filtroPais'=>$filtroPais,
           'tagsPais'=>$tagsPais,
           'quitarPais'=>$quitarPais,
           'filtroPara'=>$filtroPara,
           'tagsPara'=>$tagsPara,
           'quitarPara'=>$quitarPara,
           'numGrandePaises'=>$numGrandePaises,
           'numMedioPaises'=>$numMedioPaises,
           'numGrandePara'=>$numGrandePara,
           'numMedioPara'=>$numMedioPara,
        ));
    }

    public function PathAction($tags)
    {
        $bread = array();
        $tag1 = null;
        $tag2 = null;
        $tag3 = null;
        $bread1 = null;
        $bread2 = null;
        $bread3 = null;
        if(isset($tags[0])){
            $tag1 = $tags[0];
            if($tags[0]->getIdForm() == 18 )
            {
                $bread[$tags[0]->getTagGoogle()] = "Busco ". ucfirst( $tags[0]->getTag() );
            }else{
                $bread[$tags[0]->getTagGoogle()] = "Amigos - Contactos ". ucfirst( $tags[0]->getTag() );
            }
            $bread1 = $bread[$tags[0]->getTagGoogle()];
        }
        
        if(isset($tags[1])){
            $tag2 = $tags[1];
            if($tags[1]->getIdForm() == 1 )
            {
                $bread[$tags[1]->getTagGoogle()] = "Amigos en ".ucfirst($tags[1]->getTag());
            }else{
                $bread[$tags[1]->getTagGoogle()] = ucfirst( $tags[1]->getTag() );
            }
            $bread2 = $bread[$tags[1]->getTagGoogle()];
        }
        if(isset($tags[2])){
            $tag3 = $tags[2];
            $bread[$tags[2]->getTagGoogle()] = "Amigos para ".ucfirst( $tags[2]->getTag() );
            $bread3 = $bread[$tags[2]->getTagGoogle()];
        }

        return $this->render('AmistateBundle:listados:path.html.twig',array(
            'bread'=>$bread,
            'tag1'=>$tag1,
            'tag2'=>$tag2,
            'tag3'=>$tag3,
            'bread1'=>$bread1,
            'bread2'=>$bread2,
            'bread3'=>$bread3,
        ));
    }
    
    protected function getQuerySolr($tagsDao){
        if(count($tagsDao)==0)
            return '?q='.urlencode('*:*');
        
        $querySolr = array();
        foreach($tagsDao as $txtTag){
            if($txtTag->getIdForm()==1){
                $querySolr[] = "tags:". $txtTag->getTagGoogle() ."*";
            }elseif($txtTag->getIdForm()==19){
                $opciones = UsuarioRepository::getOpcionesPara();
                $agregado = false;
                foreach($opciones as $key => $opcion){
                    if(Strings::getSeoUrl($opcion) == $txtTag->getTagGoogle() ){
                        $querySolr[] = "para:".$key;
                        $agregado = true;
                    }
                }
                if(!$agregado)
                    $querySolr[] = "tags:".$txtTag->getTagGoogle();
            }else{
                $mujer = Strings::getSeoUrl(UsuarioRepository::getOpcionesSexo(1));
                $hombre = Strings::getSeoUrl(UsuarioRepository::getOpcionesSexo(0));
                if($mujer == $txtTag->getTagGoogle()){
                    $querySolr[] = "sexo:true";
                }elseif($hombre == $txtTag->getTagGoogle()){
                    $querySolr[] = "sexo:false";
                }else{
                    $querySolr[] = "tags:".$txtTag->getTagGoogle();
                }
            }
        }
        
        return '?q='.urlencode(implode(' AND ', $querySolr)).'&sort='.urlencode('tienefoto desc, ultima_actividad desc');
    }


    public function listPrecesar($tags,$page)
    {
        $limit = 20;
        $offset = ($page-1) * $limit;

        $tagsDao = $this->getDoctrine()->getEntityManager()->getRepository('AmistateBundle:Tags')->findTags($tags);
        if(count($tags) == (count($tagsDao)+1) )
        {
            $ta = array();
            foreach($tagsDao as $td){
                $ta[] = $td->getTagGoogle();
            }
            foreach($tags as $t){
                if (!in_array($t,$ta)) {
                    $query = '?q='.urlencode('tags:'.$t.'*')."&start=0&rows=1";
                    $result = SfSolr::getQuery($query);
                    $cant = $result['response']['numFound'];
                    if( isset($result['response']['docs'][0]) ){
                        $dat = $result['response']['docs'][0];
                        $pais = $dat['pais'];
                        $provincia = $dat['provincia'];
                        $ciudad = $dat['ciudad'];
                        
                        $return = $pais;
                        if( Strings::getSeoUrl($pais).'-' . Strings::getSeoUrl($provincia) == $t )
                            $return .= ', ' . $provincia;
                        
                        if( Strings::getSeoUrl($pais).'-' . Strings::getSeoUrl($provincia) . '-' . Strings::getSeoUrl($ciudad) == $t )
                            $return .= ', '. $provincia. ', ' . $ciudad;
                        
                        $tag = new \Mouta\AmistateBundle\Entity\Tags();
                        $tag->setIdForm(1);
                        $tag->setTag($return);
                        $tag->setTagGoogle($t);
                        $tagsDao[] = $tag;
                    }
                    
                }
            }
        }
        $ulrs = $this->get('urls');
        $isValid = $ulrs->validateUrlList($tags,$tagsDao);
        $response = new Response('Content', 404, array('content-type' => 'text/html'));
        if(!$isValid)
        {//url mal formada
            return $this->render('AmistateBundle:listados:error.html.twig',array(),$response);
        }
        
        $tagsDao = $ulrs->getTagsOrdenados($tagsDao);
        
        $query = $this->getQuerySolr($tagsDao)."&start=$offset&rows=$limit";
        
        $result = SfSolr::getQuery($query);
        $cant = $result['response']['numFound'];
        if($cant<1)
            return $this->render('AmistateBundle:listados:error.html.twig',array(),$response);

        $usuarios = $this->hidrateSolr($result);
        if(count($usuarios)<1)
            return $this->render('AmistateBundle:listados:error.html.twig',array(),$response);
        
        $cant_pag = ceil($cant/$limit);

        $url_base = "";
        if(count($tags)==1)
            $url_base = $this->generateUrl('list1',array('tag1'=>$tags[0]));
        if(count($tags)==2)
            $url_base = $this->generateUrl('list2',array('tag1'=>$tags[0],'tag2'=>$tags[1]));
        if(count($tags)==3)
            $url_base = $this->generateUrl('list3',array('tag1'=>$tags[0],'tag2'=>$tags[1],'tag3'=>$tags[2]));
        
        $descripcion = "";
        $title = "Busco amistad, amigos, mujeres y hombres, contactos";
        switch (count($tagsDao)) {
            case 1://un solo tag
                switch ($tagsDao[0]->getIdForm()) {
                    case 1:
                        $title = "Mujeres en {$tagsDao[0]->getTag()}, Hombres en {$tagsDao[0]->getTag()}, Amigos en {$tagsDao[0]->getTag()}, Contactos en {$tagsDao[0]->getTag()}";
                        break;
                    case 18:
                        $title = "Busco {$tagsDao[0]->getTag()}, Amigos {$tagsDao[0]->getTag()}, Contactos {$tagsDao[0]->getTag()}";
                        break;
                    case 19:
                        $title = "Busco {$tagsDao[0]->getTag()}, Mujeres para {$tagsDao[0]->getTag()}, Hombres para {$tagsDao[0]->getTag()}, Amigos para {$tagsDao[0]->getTag()}, Contactos para {$tagsDao[0]->getTag()}";
                        break;
                    default:
                        $title = "Busco {$tagsDao[0]->getTag()}, Mujeres {$tagsDao[0]->getTag()}, Hombres {$tagsDao[0]->getTag()}, Amigos {$tagsDao[0]->getTag()}";
                        break;
                }
                break;
            case 2://2 tags
                $title = "Amigos {$tagsDao[0]->getTag()}, Contactos {$tagsDao[1]->getTag()}";
                break;
            case 3://3 tags
                $title = "Busco {$tagsDao[0]->getTag()}, Contactos {$tagsDao[1]->getTag()}, Contactos {$tagsDao[2]->getTag()}";
                break;
            default:
                break;
        }
        $title = Strings::recortar($title, 70);
        if($page > 1)
            $title .= " - Página $page";
        if(isset($usuarios[0]))
            $descripcion = $title . " ". $usuarios[0]->getDescripcion();
        $descripcion = Strings::recortar($descripcion , 160);
        return $this->render('AmistateBundle:listados:list.html.twig',array(
            'usuarios'=>$usuarios,
            'cant'=>$cant,
            'page'=>$page,
            'tags'=>$tagsDao,
            'url_base'=>$url_base,
            'cant_pag'=>$cant_pag,
            'title'=>$title,
            'descripcion'=>$descripcion,
        ));
    }
    
    public function listLindosPrecesar($sexo,$page)
    {
        $limit = 20;
        $offset = ($page-1) * $limit;

        $response = new Response('Content', 404, array('content-type' => 'text/html'));
        $query = "?q=sexo:$sexo%20AND%20tienefoto:1&sort=puntos%20desc&start=$offset&rows=$limit";
        $result = SfSolr::getQuery($query);
        $cant = $result['response']['numFound'];
        if($cant<1)
            return $this->render('AmistateBundle:listados:error.html.twig',array(),$response);

        $usuarios = $this->hidrateSolr($result);
        if(count($usuarios)<1)
            return $this->render('AmistateBundle:listados:error.html.twig',array(),$response);
        
        $cant_pag = ceil($cant/$limit);

        if($sexo){
            $url_base = $this->generateUrl('mas_lindas');
            $descripcion = "Encontra las Mujeres más bellas del mundo, fotos y videos de las chicas más bellas";
            $title = "Las mujeres más bellas - Fotos de las más lindas";
            if($page>1){
                $title .= " - Página $page";
                $descripcion .= " - Página $page";
            }
        }else{
            $url_base = $this->generateUrl('mas_lindos');
            $descripcion = "Encontra los Hombres más guapos del mundo, fotos y videos de las chicos más lindos";
            $title = "Los hombres más guapos - Fotos de los más lindos";
            if($page>1){
                $title .= " - Página $page";
                $descripcion .= " - Página $page";
            }
        }
        return $this->render('AmistateBundle:listados:list.html.twig',array(
            'usuarios'=>$usuarios,
            'cant'=>$cant,
            'page'=>$page,
            'tags'=>array(),
            'url_base'=>$url_base,
            'cant_pag'=>$cant_pag,
            'title'=>$title,
            'descripcion'=>$descripcion,
        ));
    }
    
    public function homeAction($page = 1)
    {
        $tagsDao = array();
        $limit = 20;
        $offset = ($page-1) * $limit;

        $query = '?q='.urlencode('*:*').'&sort='.urlencode('tienefoto desc, ultima_actividad desc')."&start=$offset&rows=$limit";
        $response = new Response('Content', 404, array('content-type' => 'text/html'));
        $result = SfSolr::getQuery($query);
        $cant = $result['response']['numFound'];
        if($cant<1)
            return $this->render('AmistateBundle:listados:error.html.twig',array(),$response);

        $usuarios = $this->hidrateSolr($result);
        if(count($usuarios)<1)
            return $this->render('AmistateBundle:listados:error.html.twig',array(),$response);
        
        $cant_pag = ceil($cant/$limit);

        $url_base = $this->generateUrl('_homepage');
        
        $title = "Amigos, Contactos gratis, Busco hombre, Busco Mujer, Amor online";
        $descripcion = "Mujeres y Hombres de todo el mundo conectados para hacer Amigos online gratis, Buscar chicos y chicas para contactos, intercambios de fotos y videos";
        if($page > 1){
            $title .= " - Página $page";
            $descripcion .= " - Página $page";
        }
        return $this->render('AmistateBundle:listados:list.html.twig',array(
            'usuarios'=>$usuarios,
            'cant'=>$cant,
            'page'=>$page,
            'tags'=>$tagsDao,
            'url_base'=>$url_base,
            'cant_pag'=>$cant_pag,
            'title'=>$title,
            'descripcion'=>$descripcion,
        ));
    }
    
}
